package com.donleo.stmg.entity.service;

import com.donleo.stmg.common.api.CommonResult;
import com.donleo.stmg.entity.model.Permission;
import com.donleo.stmg.entity.model.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.donleo.stmg.entity.vo.LoginParams;
import com.donleo.stmg.entity.vo.UserVo;

import java.util.List;

/**
 * <p>
 * 用户表 服务类
 * </p>
 *
 * @author liangd
 * @since 2020-12-21
 */
public interface UserService extends IService<User> {
    /**
     * 根据用户编号查询
     *
     * @param code
     * @return
     */
    User getUserByCode(String code);

    /**
     * 根据用户编号查询用户权限
     *
     * @param userCode
     * @return
     */
    List<Permission> getPermissionsByUserId(String userCode);

    /**
     * 用户登录
     *
     * @param loginParams
     * @return
     */
    String login(LoginParams loginParams);

    /**
     * 验证码验证
     *
     * @param validateCode
     * @return
     */
    boolean isValidateCode(String validateCode);

    /**
     * 用户注册
     *
     * @param user
     * @return
     */
    Boolean register(User user);

    /**
     * 获取用户权限
     *
     * @param userCode
     * @return
     */
    User loadUserAuthorityByUserCode(String userCode);

    /**
     * 冻结用户
     *
     * @param user
     */
    void frozenUser(User user);

    /**
     * 判断用户是否被冻结
     *
     * @param code
     * @return
     */
    boolean isFrozenUser(String code);

    /**
     * 查询所有
     *
     * @param userVo
     * @return
     */
    List<User> findAll(UserVo userVo);

    /**
     * 统计条数
     *
     * @param userVo
     * @return
     */
    long getCount(UserVo userVo);

    /**
     * 更新
     *
     * @param user
     * @return
     */
    CommonResult updateUser(User user);

    /**
     * 查询单个
     *
     * @param id
     * @return
     */
    User findById(Integer id);

    /**
     * 根据角色编号查用户
     *
     * @param roleCode
     * @return
     */
    List<User> findUserByRoleCode(String roleCode);

    /**
     * 根据小组编号查询用户
     *
     * @param teamCode
     * @return
     */
    List<User> findUserByTeamCode(String teamCode,Integer pageNum, Integer pageSize);

    /**
     *
     * @param teamCode
     * @return
     */
    long getCountByTeamCode(String teamCode);

    /**
     * 查询未分组的用户
     *
     * @return
     */
    List<User> findUngroupedUser();

}
